/***************************************************************************************************
 *Copyright(C),2010-2016,Sumscope
 *FileName	:  FormatTable.h
 *Author	:  scofined.qi
 *Version	:  1.0
 *Date		:  2016/08/03
 *Desc		:  //用于主要说明此程序文件完成的主要功能
 *Relation :
 *Others	:  //其他内容说明
 *Function :  //主要函数列表，每条记录应包含函数名及功能简要说明
 *History	:
 * //修改历史记录列表，每条修改记录应包含修改日期、修改者及修改内容简介
 ***************************************************************************************************/
#pragma once

#include "../core.h"
#include "BaseString.h"

namespace qb {
namespace base {
class TableGroup;
class TableGroupVec;
class S_CORE_EXPORT FormatTable {
  enum kOutputType {
    kOutputTypeLog,
    kOutputTypeConsole,
    kOutputTypeDebugView,
  };
  TableGroupVec* m_groups;
  bool m_autolist;
  bool m_hasref;

 public:
  FormatTable();
  ~FormatTable();
  void SetAutoList(bool autoList) { m_autolist = autoList; }
  // 为一个表格的一条记录增加各个字段,当字段名称重复的时候,表示切换到下一条记录
  void AddField(const BaseString& name, const BaseString& value,
                int maxLength = 0);

  // 增加新的表格
  void AddGroup(const BaseString& name);

  // 按照指定的列排序
  void SortBy(const BaseString& name, bool ascend);

  // 格式化表格为一个字符串
  BaseString Format();
  void FormatToLog(const char* msg = nullptr);
  void FormatToDebugView(const char* msg = nullptr);
  void FormatToConsole(const char* msg = nullptr);

 protected:
  void FormatToOutput(kOutputType type, const char* msg);
  void UpdateRefColumn();
};
}  // namespace base
}  // namespace qb
